package com.lbd99.data.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 * @description:日期工具类
 * @author caiwenhong
 * @date 2015年7月27日
 */
public class DateUtil {
	/**
	 * 把时间戳 转为 Date日期
	 * @param timestamp  时间戳
	 * @return date 日期
	 */
	public static Date timestamp2DateTime(Long timestamp) {
		Date date =null;
		if (timestamp!=null) {
			date =new Date();
			date.setTime(timestamp);
			return date;
		}
	    return date;
	}

	/**
	 * 把 Date日期 转为 时间戳
	 * @param dateTime   日期
	 * @return long型的 时间戳
	 */
	public static Long dateTime2timestamp(Date dateTime) {
		Long longDate = null;
		if (dateTime != null) {
			return dateTime.getTime();
		}
		return longDate;
	}
	
	/** 把  date日期  转为     字符串日期
	 * caiwenhong add 传入 date类型日期，返回 字符串 日期格式
	 * 
	 * @param 日期格式   type; 
	 *             1:yyyy-MM-dd HH:mm:ss ,
	 *             2:yyyy-MM-dd
	 * @param date
	 *            date类型日期
	 * @return 字符串 日期格式
	 */
	public static String date2String(int type, Date date) {
		String format = "";
		if (type == 1) {
			format = "yyyy-MM-dd HH:mm:ss";
		} else if (type == 2) {
			format = "yyyy-MM-dd";
		}else if (type == 3) {
			format = "yyyyMMddHHmmss";
		}else if (type == 4) {
			format = "yyyyMMdd";
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(date);
	}
	
	
	/** 把 字符串格式 日期   转为    date 日期
	 * @param str 字符串日期
	 * @param type 为:
	 *  1:yyyy-MM-dd HH:mm:ss 
	 *  2:yyyy-MM-dd
	 *  3:yyyy-MM-dd HH:mm
	 *  
	 * @return date 日期
	 */
	public static Date string2date(String dateStr,int type){
		String dateFormat="";  
		if (type==1) {
			dateFormat="yyyy-MM-dd HH:mm:ss";
		}else if(type==2){
			dateFormat="yyyy-MM-dd";
		}else if (type==3) {
			dateFormat="yyyy-MM-dd HH:mm";
		}else if (type==4) {
			dateFormat="yyyyMMddHHmmss";
		}
		SimpleDateFormat format = new SimpleDateFormat(dateFormat);
		Date date=null;
			try {
				date=format.parse(dateStr);
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return date;
	}
	
	
	/**   
	 * 判断 在 一个时间范围内 是否有效，如：在24小时内有效，或者 1分钟内有效
	 * @param timestamp 时间戳
	 * @param type 1：小时 ，2：分钟
	 * @param expireTime   过期时间（数字），如：1、2、3、4……
	 * @return  true:时间在这个范围内（没过期），false:超过了这个范围（已过期）
	 */
	public static Boolean isInvalidScope(Long timestamp,int type,String expireTime){
		Boolean bool=true;
		if (timestamp==null) {
			return bool;
		}
		Long expireDate =null;
		//如果是 小时，如 24小时
		if (type==1) { 
			//得到过期 日期
			expireDate =Long.valueOf(expireTime)*60*60*1000+timestamp;
		}
		//如果是分钟，如 10分钟
		else if (type==2) {
			//得到过期 日期
			expireDate =Long.valueOf(expireTime)*60*1000+timestamp;
		}
		//说明 已过期了，当前时间 已超过了 过期时间
		if (System.currentTimeMillis()>expireDate) {
			bool=false;
		}
		return bool;
	}
	

	public static String getBeforeDate(int d) {
		Date dNow = new Date(); // 当前时间
		Date dBefore = new Date();

		Calendar calendar = Calendar.getInstance(); // 得到日历
		calendar.setTime(dNow);// 把当前时间赋给日历
		calendar.add(Calendar.DAY_OF_MONTH, d); // 设置为前一天
		dBefore = calendar.getTime(); // 得到前一天的时间

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
		String result = sdf.format(dBefore); // 格式化前n天
		return result;
	}
	
	public static void main(String[] args) {
		System.out.println(getBeforeDate(-7));
	}
	
}
